#include "ecgrwaveextract.h"
#include "qdebug.h"

ECGRWaveExtract::ECGRWaveExtract() {
    qDebug()<<"ECGRWaveExtract created!";
    ECG_OSEA_init();
}

ECGRWaveExtract::~ECGRWaveExtract()
{
    qDebug()<<"ECGRWaveExtract destroyed!";
    ECG_OSEA_Stop();
}

void ECGRWaveExtract::ECG_R_Extract(const QVector<double>& rawECG, QVector<int>& rPos)
{
    // 检查输入有效性
    if (rawECG.isEmpty())  {
        qWarning() << "Input ECG data is empty!";
        return;
    }

    // 使用 QVector 管理内存，避免手动 new/delete
    QVector<int> intECG(rawECG.size());
    std::transform(rawECG.begin(),  rawECG.end(),  intECG.begin(),  [](double val) {
        return static_cast<int>(val * 1000000); // 直接转换并放大
    });

    // 使用 QVector 存储 R 峰位置，避免手动管理内存
    QVector<int> rPeak(rawECG.size());

    // 调用算法处理
    int validLen = ECG_OSEA_Start(intECG.data(),  intECG.size(),  rPeak.data());

    for (int i = 0; i < validLen; ++i) {
        rPos.append(rPeak[i]);
    }
}
